package loja.stock.teste;

import static org.junit.Assert.*;
import loja.Produto;
import loja.stock.Armazem;
import loja.stock.Movimento;
import loja.stock.TipoMovimento;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import utilities.Data;

import BaseDados.BaseDados;

public class MovimentoTest {

	private static Movimento m2, m3, m4;
	private static BaseDados bd;
	private static Produto p2, p3;
	private static TipoMovimento t1, t2;
	private static Armazem a1, a3;
	private Data d = Data.hoje();

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		bd = new BaseDados();
		p2 = new Produto(3, "Prod 3", 2.50, "ml", "1234");
		p3 = new Produto(4, "Prod 4", 5.99, "g", "1235");
		a1 = new Armazem(1, "Armazem 1");
		a3 = new Armazem(3, "Armazem 3");
		t1 = new TipoMovimento(1, "Mov 1");
		t2 = new TipoMovimento(2, "Mov 2");
		m2 = new Movimento(5, new Data(12, 4, 2010), p3, a1, t1, 13, 50);
		m3 = new Movimento(6, new Data(13, 4, 2010), p2, a3, t2, 15, 100);
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.print("END OF TEST");
	}

	@Before
	public void setUp() throws Exception {
		System.out.println("setUp()");
	}

	@After
	public void tearDown() throws Exception {
		System.out.println("tearDown()");
	}

	@Test
	public final void testMovimento() {
		m4 = null;
		assertNotNull(m2);
		assertNotSame(m2, m4);
	}

	@Test
	public final void testGetId_movimento() {

		assertFalse(m2.getId_movimento() == 1);
		assertSame(11, m2.getId_movimento() + m3.getId_movimento());
	}

	@Test
	public final void testGetProduto() {

		assertNotNull(m3.getProduto());
		assertTrue(p2.getCodigo().equals("1234"));
	}

	@Test
	public final void testGetTipo_movimento() {

		assertSame(m2.getTipo_movimento(), t1);
		assertFalse(t2.getId_tipo() == 67);

	}

	@Test
	public final void testGetArmazem() {

		assertSame(m3.getArmazem().getNome(), a3.getNome());
		assertFalse(a1.getId_armazem() == 2 && a1.getNome().equals("Armazem 1"));
	}

	@Test
	public final void testGetQuantidade() {

		assertFalse(m2.getQuantidade() == m3.getQuantidade());
		assertTrue(m3.getQuantidade() > m2.getQuantidade());
	}

	@Test
	public final void testGetData() {

		assertTrue(m2.getData().getAno() == 2010);
	}

	@Test
	public final void testGetValor() {
		assertTrue((m3.getValor() - m2.getValor()) == 50);
	}

}
